import axios from 'axios';
import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
import { ElMessage } from 'element-plus';

// 创建axios实例
const request: AxiosInstance = axios.create({
  baseURL: 'http://localhost:8080',  // 使用HTTP连接后端服务
  timeout: 15000,
  headers: {
    'Content-Type': 'application/json',
  },
});

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // 这里可以添加token等认证信息
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  (response: AxiosResponse) => {
    return response.data;
  },
  async (error) => {
    // 统一错误处理
    if (error.response?.status === 0 || error.code === 'ECONNABORTED') {
      // 连接错误，尝试切换协议
      const currentURL = error.config.url;
      const newURL = currentURL.startsWith('https:') 
        ? currentURL.replace('https:', 'http:')
        : currentURL.replace('http:', 'https:');
      
      try {
        const retryConfig = {
          ...error.config,
          url: newURL
        };
        return await request(retryConfig);
      } catch (retryError) {
        console.error('Retry failed:', retryError);
        ElMessage.error('连接服务器失败，请检查网络或联系管理员');
        return Promise.reject(retryError);
      }
    }

    const message = error.response?.data?.message || error.message;
    ElMessage.error(message);
    return Promise.reject(error);
  }
);

export default request;
